home *** CD-ROM | disk | FTP | other *** search
/ The Utilities Experience / The Utilities Experience - Volume 1.iso / software / icons+tools / iconian / sources / emodules / mod / menus.e < prev    next >
Text File  |  1995-12-22  |  2KB  |  100 lines

  1. OPT MODULE
  2.  
  3. MODULE    'intuition/intuition'
  4.  
  5. EXPORT PROC packmenunumber(menu=MENUNULL,item=NOITEM,sub=NOSUB)
  6.     DEF work
  7.     IF menu=-1 THEN menu:=MENUNULL
  8.     IF item=-1 THEN item:=NOITEM
  9.     IF sub=-1 THEN sub:=NOSUB
  10.     menu:=menu AND %11111
  11.   item:=item AND %111111
  12.   sub:=sub AND %11111
  13.     work:=Shl(sub,8)
  14.     work:=Shl(work,3)
  15.     work:=(work OR (Shl(item,5)))
  16.     work:=(work OR menu)
  17. ENDPROC work
  18.  
  19. EXPORT PROC unpackmenunumber(code)
  20.     DEF menu,item,sub,c
  21.     c:=code
  22.     menu:=c AND %11111
  23.     c:=Shr(c,5)
  24.     item:=c AND %111111
  25.     c:=Shr(c,6)
  26.     sub:=c AND %11111
  27. ENDPROC menu,item,sub
  28.  
  29. EXPORT PROC findmenuid(menu:PTR TO menu,id)                            -> This routine takes ALOT of time.  :P
  30.     DEF menuitem:PTR TO menuitem,subitem:PTR TO menuitem
  31.     DEF t=-1,i=-1,si=-1
  32.     DEF long:PTR TO LONG
  33.     WHILE menu>0
  34.         t:=t+1
  35.         menuitem:=menu.firstitem
  36.         WHILE menuitem>0
  37.             i:=i+1
  38.             subitem:=menuitem.subitem
  39.             long:=menuitem+34
  40.             IF (long[0]=id) THEN RETURN t,i,NOSUB
  41.             WHILE subitem>0
  42.                 si:=si+1
  43.                 long:=subitem+34
  44.                 IF (long[0]=id) THEN RETURN t,i,si
  45.                 subitem:=subitem.nextitem            
  46.             ENDWHILE
  47.             menuitem:=menuitem.nextitem
  48.             si:=-1
  49.         ENDWHILE
  50.         i:=-1
  51.         menu:=menu.nextmenu
  52.     ENDWHILE
  53. ENDPROC -1,-1,-1
  54.  
  55. EXPORT PROC findmenuitem(menu:PTR TO menu,title,item=NOITEM,subitem=NOSUB)
  56.     DEF menuitem:PTR TO menuitem
  57.     DEF localscratch
  58.     IF title>0
  59.         FOR localscratch:=1 TO title
  60.             menu:=menu.nextmenu
  61.         ENDFOR
  62.     ENDIF
  63.     menuitem:=menu
  64.     IF item<>NOITEM
  65.         menuitem:=menu.firstitem
  66.         FOR localscratch:=1 TO item
  67.             menuitem:=menuitem.nextitem
  68.         ENDFOR
  69.         IF (subitem<>NOSUB)
  70.             menuitem:=menuitem.subitem
  71.             IF subitem>0
  72.                 FOR localscratch:=1 TO subitem
  73.                     menuitem:=menuitem.nextitem
  74.                 ENDFOR
  75.             ENDIF
  76.         ENDIF
  77.     ENDIF
  78. ENDPROC menuitem
  79.  
  80. EXPORT PROC ischecked(menu,id)
  81.     DEF m,i,s
  82.     DEF item:PTR TO menuitem
  83.     m,i,s:=findmenuid(menu,id)
  84.     item:=findmenuitem(menu,m,i,s)
  85.     RETURN (item.flags AND CHECKED)
  86. ENDPROC
  87.     
  88. EXPORT PROC check(menu,item,f=TRUE)
  89.     DEF mi:PTR TO menuitem,t,i,si
  90.     t,i,si:=findmenuid(menu,item)  ->  Finds t,s,si using our USERID!
  91.     mi:=findmenuitem(menu,t,i,si)  ->  Finds a menuitem struct using t,s,si!  Redundant...
  92.     IF mi>50
  93.         IF f=0
  94.             mi.flags:=(mi.flags AND Not(CHECKED))
  95.         ELSE
  96.             mi.flags:=(mi.flags OR CHECKED)
  97.         ENDIF    
  98.     ENDIF
  99. ENDPROC
  100.